#include <stdio.h>
#include <stdlib.h>

typedef int ElemSet;

typedef struct ListNode *Position; /* 指针即结点位置 */
struct ListNode {
    ElemSet data; /* 存储数据*/
    Position next; /* 线性表中下一个元素的位置 */
};
typedef struct HeadNode *List;
struct HeadNode {
    Position head; /* 单链表头指针 */
    int length; /* 表长 */
};

/* 算法2-8：从单链表list中删除第i个元素 Remove (list, i) */
void Remove(List list, int i) {
    /* i是删除元素的位置序号，从1开始 */
    Position deleted_node, p;
    int counter;

    if (i < 1) { /* 删除位置不合法，退出 */
        printf("错误：删除位置不合法。\n");
        return;
    }
    p = list->head;
    if ((p != NULL) && (i == 1)) { /* 删除第1个结点 */
        list->head = p->next;
        free(p);
        list->length--;
    } else { /*  i>1，寻找第 i-1 个结点 */
        counter = 1;
        while ((p != NULL) && (counter < (i - 1))) {
            p = p->next;
            counter++;
        }
        if ((p != NULL)
                && (p->next != NULL)) { /* p指向第 (i-1)个结点，且待删除结点存在 */
            deleted_node = p->next;
            p->next = deleted_node->next;
            free(deleted_node);
            list->length--;
        } else { /* 删除位置不合法，退出 */
            printf("错误：删除位置不合法。\n");
        }
    }
}
/* 算法2-8 结束 */

int main(void) {
    int i, n;
    Position tmp;
    List list;

    list = (List)malloc(sizeof(struct HeadNode));
    list->head = NULL;
    list->length = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        tmp = (Position)malloc(sizeof(struct ListNode));
        scanf("%d", &tmp->data); /* 读入一个结点的数据 */
        tmp->next = list->head; /* 将新结点插入链表头 */
        list->head = tmp;
        list->length++;
    }
    scanf("%d", &i);
    Remove(list, i);
    tmp = list->head;
    printf("%d:", list->length);
    while (tmp != NULL) {
        printf(" %d", tmp->data);
        tmp = tmp->next;
    }
    printf("\n");
    return 0;
}